package com.serializetool.handler;

import com.google.protobuf.BytesValue;
import com.google.protobuf.MessageLiteOrBuilder;
import com.serializetool.Request;
import com.serializetool.SerializingUtil;
import com.serializetool.Validation;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.handler.codec.protobuf.ProtobufEncoder;

import java.nio.charset.StandardCharsets;
import java.util.List;

public class RpcEncoder extends MessageToByteEncoder {
    public RpcEncoder(){

    }

    @Override
    protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
        Request request = (Request) msg;
        request.setMagicNum(Validation.REQ_MES.getCode());
        byte[] bytes = SerializingUtil.serialize(request);
        int len = bytes.length;
//        String str = Integer.toBinaryString(len);
//        byte[] headBytes = str.getBytes(StandardCharsets.UTF_8);
//        int zeroLen = 32-str.length();
//        int totalLen = len+32;
//        byte[] output = new byte[32+len];
//        for(int i=zeroLen;i<32;i++){
//            output[i] = headBytes[i];
//        }
//        for(int i=32;i<totalLen;i++){
//            output[i] = bytes[i-32];
//        }
//        System.out.println(output);
//        out.writeBytes(output);
        out.writeInt(len);
        out.writeBytes(bytes);
    }
}
